perm filename PLOT4.OLD[NEW,LCS] blob
sn#502557 filedate 1980-03-25 generic text, type T, neo UTF8
00100 TITLE PLOT
00200 INTERNAL PLOT,VARIAN
00300 EXTERNAL EXTOUT,FINEXT,EXIT,PUTEXT,OUTF,TTOP,DL,TYPWRD
00400 ;; COMMON /DL/RSIZ,SAVER,NAME,EXT
00500 ;;TITLE VM ;PRINTS MUSIC FORMAT FILE ON VARIAN PRINTER.
00600 ;↓↓AC DEF
00700 A←1
00800 B←2
00900 C←3
01000 D←4
01100 E←5
01200 L←6
01300 U←7
01400 X←11
01500 Y←12
01600 XD←13
01700 T←15
01800 TT←16
01900 P←17
02000
02100 ;;LPDL←←69
02200 NBUFS←←4
02300 DSK←←1
02400 VRN←←2 ;DEVICE NAME OF VARIAN STATOS
02500
02600 LMAR←←=0
02700 RMAR←←=4223 ;WILL DO 10.2" LONG MAXIMUM
02800 WIDTH←←=4224 ;22" WIDE PAPER -- MAYBE 21 WOULD BE BETTER?
02900 LBUFL←←=118 ;LINE LENGTH IN WORDS
03000
03100 LSTBIT←←1⊗34
03200
03300 OVERLAP←←=50
03400
03500 EXTERN JOBREL,JOBFF,JOBTPC,JOBAPR,JOBCNI
03600 MAILBF: BLOCK 40
03700 SIGN: 0
03800 LINE: 0
03900 PNTR: 0
04000
04100 SVX: 0
04200 SVY: 0
04300 SVPEN: 0
04400
04500
04600 LX: 0
04700 VARIAN: 0 ;DO SET UP FOR VARIAN OUTPUT.
04800 MOVEM 16,ACZ ;SAVE AC16 FOR RETURN
04900 MOVNM 4,LX ;L=1
05000 SETZM OUTF+2 ;VECTOR COUNTER (TEMPORARY, I HOPE)
05100 MOVEI 4,=50000
05200 MOVEM 4,TTOP+1 ;INITIALIZE JBOT AND JTOP
05300 MOVNM 4,TTOP ;JBOT=50000, JTOP=-50000
05400 MOVNM 4,RTMAX# ;RTMX=-50000
05500 MOVEM 4,SVX ;INIT OLD X AND Y
05600 MOVEM 5,SVY
05610 MOVE 0,[1700.0] ;STANDARD PAGE WIDTH=8.5"
05620 FMPR 0,DL ;TIMES GIVEN SIZE FACTOR
05630 KIFIX ;FIX IT
05640 MOVEM PWIDTH ;THIS WILL ALSO BE IN THE HEADER (SEE LATER)
05650 MOVE [900.0]
05660 FMPR DL ;GET THE OFFSET VALUE
05670 KIFIX
05680 MOVEM SHIFT# ;USED IN MAIN LOOP - AFTER PLOT1
05700 XNTF4: MOVE 0,OUTF ;***** THIS CONVERTS ASCIZ WORD TO SIXBIT***
05800 MOVEM 0,FNX# ; *
05900 MOVE 1,[POINT 7,FNX] ; *
06000 XNTF3: MOVE 2,[POINT 6,FILNAM] ; *
06100 SETZM FILNAM ; *
06200 MOVEI 3,5 ; *
06300 XNTF1: ILDB 0,1 ; *
06400 CAIN 0," " ; *
06500 JRST XNTF2 ; *
06600 SUBI 0,40 ; *
06700 IDPB 0,2 ; *
06800 SOJG 3,XNTF1 ;*******************************************
06900 XNTF2: SETOM OUTF ;JJ=-1 IS THIS NEEDED?
07000 PUSHJ P,SETUP ;GO SET UP VM PROG.
07100 SKIPN SAVBIT ;WRITE A FILE?
07200 JRST PLZ ;NO
07300 SETZM SVX
07400 MOVEI 3
07500 MOVEM SVPEN
07600 MOVE SVBBB ;NUMB OF SCAN LINES-1
07700 SUB SHIFT ;LESS SHIFT NUMBER
07800 MOVEM ACZ+1 ;SAVE Y FOR BLACK DOT
07900 MOVEM SVY ;GO SEND AN INVIS. VECTOR TO MAXIMUM Y POS.
08000 PUSHJ P,PLOT1 ; IN ORDER TO GET PROPER AMOUNT OF CLEAN CORE. 3/24/80
08100 MOVEI 2
08200 MOVEM SVPEN
08300 MOVE ACZ+1
08400 MOVEM SVY
08500 SETZM SVX ;RESET X AND Y
08600 PUSHJ P,PLOT1 ;MAKE A DOT AT POINT OUTSIDE OF VARIAN PROG.'S WINDOW
08700 PLZ: MOVE 16,ACZ ;GET BACK AC16
08800 JRA 16,(16) ;VARIAN SETUP ALL DONE
08900
09000 PLOT: 0 ;SUBROUTINE PLOT(I,J,K)
09100 PUSHJ P,SAVACZ ;SAVE ALL ACS
09200 PL4: MOVE 5,@2(16) ;4 IF(K.EQ.99)GO TO 1
09300 ;;; CAIN 5,=99
09400 CAIE 5,=99
09500 JRST PLX
09600 SKIPE SAVBIT ;WRITE FILE?
09700 JRST OUTFIL ;YES PUSHJ P,OUTFIL ;GO OUTPUT BIT MAP
09800 JRST PCUT ;GO DO OUTPUT TO VRN.
09900 PLX: MOVEM 5,SVPEN
10000 MOVN 5,@(16) ;MOVE 4,@(16) ;IF(X2.EQ.SVX.AND.Y2.EQ.SVY)RETURN
10100 MOVE 4,@1(16) ; ROTATE !! MOVE 5,@1(16) ;AVOID DUPLICATE COORDS.
10200 CAMN 4,SVX
10300 CAME 5,SVY
10400 JRST DIFRNT
10500 SKIPL 15,@2(16) ;SKIP IF -3 IN PEN CODE
10600 JRA 16,3(16) ;RETURN
10700 DIFRNT: MOVEM 4,SVX
10800 MOVEM 5,SVY ;SAVE X AND Y FOR NEXT TIME
10900 PUSHJ P,PLOT1 ;GO TO BIT MAP ROUTINE
11000 PUSHJ P,GETACZ ;GET BACK ALL ACS
11100
11200 AOS OUTF+2 ;UPDATE VECT. COUNTER
11300 NZZ: MOVE 1,@1(16) ;****ALL THIS TO FIND TRUE VERTICAL SIZE OF IMAGE.
11400 MOVEI 0,2 ;****
11500 CAME 0,SVPEN ;**** IS PEN DOWN (=2)?
11600 JRST NXX ;**** NO
11700 CAMLE 1,TTOP ;**** GETS Y COORD.
11800 MOVEM 1,TTOP ;****
11900 CAMGE 1,TTOP+1 ;**** THIS AREA SAVES TOP AND BOT LIMITS
12000 MOVEM 1,TTOP+1 ;****
12100 MOVE 1,INVIS ;****
12200 CAMLE 1,TTOP ;****
12300 MOVEM 1,TTOP ;**** THIS TO AVOID INCLUDING 1ST AND LAST
12400 CAMGE 1,TTOP+1 ;**** INVISIBILE POSITIONS.
12500 MOVEM 1,TTOP+1 ;****
12600 MOVE 1,@(16) ; GET X COORD.
12700 CAMLE 1,RTMAX ; IS THIS FURTHER TO RIGHT?
12800 MOVEM 1,RTMAX ;YES WRITE THIS AS LAST WD. OF FILE
12900 JRST NWW ;****
13000 NXX: MOVEM 1,INVIS# ;****
13100 SKIPL SVPEN ;**** SKIP IF PEN=-3 (RESETS TO 0,0)
13200 JRST NWW ;****
13300 MOVN 1,@1(16) ;**** GET Y FOR PEN RESET
13400 ADDM 1,TTOP ;**** SUBTRACT NEW POS. FROM BOTH TOP AND BOT
13500 ADDM 1,TTOP+1 ;****
13600 NWW: MOVE 7,LX
13700 JRA 16,3(16) ;GO BACK FOR ANOTHER VECTOR
00100 SETUP: SETOM LINE
00200 GETLIN LINE ;FOR ERROR PRINTOUT
00300 CALLI
00400 HRRZS LINE ;CLEAR LINE BITS
00500 HRRZI A,CORUP
00600 HRRZM A,JOBAPR
00700 SETOM SSS#
00800 SETZM ROT1# ;1ST TIME FLAG
00900 SETZM SAVBIT# ;FLAG TO SAVE BITS.
01000 HRRZ A,JOBFF ;RESET CORE WITHOUT A RESET
01100 CORE A,
01200 JRST 4,.
01300
01400 MOVEI A,20000 ;REG MPV
01500 APRENB A, ;REG ENABLE OLD WAY!
01600
01700 OUTSTR [ASCIZ/WRITE .VRN FILE? Y OR <CR>=PRINT DIRECT /]
01800 PUSHJ P,GETNAM
01900 CAMN A,[SIXBIT/Y/]
02000 SETOM SAVBIT
02100 PUSHJ P,INCHLF ;LOOK FOR LINE-FEED
02200 FILIN: HRREI B,-60
02300 HRREI A,-=1400 ;-=2000 ; YES, DEFAULT = 10"
02400 YDEF: ADD A,B
02500 MOVNM A,INIX#
02600 ASKLEN: SETZM POOBX#
02700 SETZM POOBY#
02800 PUSHJ P,XINI ;GET X INFO
02900 SETZM XX#
03000 SETZM YY#
03100 MOVEI C,3
03200 HRRZM C,PENN#
03300 PUSHJ P,SAVAC ;SAVE ALL ACS
03400 POPJ P, ;GO BACK TO OLD PLOT
00100 XINI: OUTSTR [ASCIZ /PAGE HEIGHT? (<CR>=11") /]
00200 PUSHJ P,RNUM ;SKIP NEXT IF A NUMBER WAS TYPED.
00300 JRST DEFAU ;USE DEFAULT VALUE 11"=850 X OFFSET
00400 SUBI A,=11 ;TAKE AWAY BASIC 11" HEIGHT
00500 IMULI A,=200 ;200 LINES/INCH
00600 SUBI A,=850 ;LESS DEFAULT OFFSET
00700 MOVNS A
00800 SKIPA
00900 DEFAU: MOVEI A,=850
01000 MOVEM A,XSHIFT# ;X OFFSET VALUE
01100 ; MOVEI A,=900
01200 ;IYDEF: MOVEM A,SHIFT# ;A MINUS NUMBER SHIFTS IMAGE DOWN OFF PAGE
01300 ; MOVEI A,=1702 ;+2 TO EXPAND TO SUFFICIENT CORE
01310 MOVE A,PWIDTH
01320 ADDI A,2 ;+2 TO EXPAND TO SUFFICIENT CORE
01400 MOVEI B,-1(A)
01500 IMULI A,LBUFL+1 ;A← BUFSIZ ← ROWS * COL
01600 MOVE T,JOBFF ;GET START ADDR
01700 MOVEM T,XGPPTR
01800 SOS XGPPTR
01900 MOVEI T,2(A)
02000 MOVNI TT,(T)
02100 ADD T,XGPPTR
02200 HRLM TT,XGPPTR ;XGPPTR← -WDCNT,,ADDR-1
02300 MOVE TT,T
02400
02500 HRRZ L,XGPPTR
02600 MOVSI T,1(L)
02700 HRRI T,2(L)
02800 SETZM 1(L)
02900 MOVE U,JOBREL
03000 BLT T,(U) ;ZERO TO END OF CORE
03100 HRRZI U,(TT)
03200 MOVEM B,SVBBB#
03300
03400 MOVEI Y,2(L)
03500 MOVEI XD,DBUF+1
03600 SKIPL A,INIX ;WHERE DO WE START
03700 JRST MAYBON
03800 SUBI A,43
03900 IDIV A,[-44]
04000 HRLOI X,XD
04100 SOJA A,SETB
04200
04300 MAYBON: ADDI A,43
04400 IDIVI A,44
04500 CAILE A,LBUFL
04600 JRST OFFRT
04700 MOVE X,A
04800 SETZ A,
04900 HRLI X,Y
05000 JRST SETB
05100
05200 OFFRT: MOVE X,[XD,,LBUFL]
05300 SUBI A,LBUFL
05400 SETB: MOVE B,INIX
05500 IDIVI B,44
05600 MOVSI B,400000
05700 MOVN C,C
05800 ROT B,(C)
05900 POPJ P,
06000
06100 POPJ1: AOS (P)
06200 CPOPJ: POPJ P,
06300
00100 PLOT1: PUSHJ P,GETAC ;GET BACK ALL ACS
00200 MOVE 15,SVPEN
00300 JUMPG 15,NORSET ;NEXT FOR RESET OF COORDS TO 0,0 (SVPEN=-1)
00400 MOVE 15,SVX
00500 SKIPN ROT1# ;ROT1=FLAG FOR FIRST TIME
00600 sub 15,INIX ;1ST TIME SHIFT. ADD INITIAL OFFSET
00700 ADDM 15,XSHIFT ;GET NEW XSHIFT
00800 SETOM ROT1
00900 POPJ P,
01000
01100 NORSET: MOVE A,SVPEN ;GET PEN CODE - NO RESET
01200 MOVE 15,SVY
01300 SSSS: ADD 15,SHIFT# ;SHIFTS ONLY AFTER (0,0) IS SET (SVPEN=-3)
01400 MOVEM 15,SVY ;GET Y
01500 SUB 15,YY
01600 MOVEM 15,SVYSB# ;SAVE Y DIFF
01700 IMULI 15,LBUFL+1
01800 ADD 15,Y
01900 YOK: MOVEM 15,SVYOD# ;SAVE NEW Y
02000 CAIL 15,(L) ;OFF BOTTOM
02100 CAILE 15,-LBUFL-1(U) ;OFF TOP
02200 JRST LOSE
02300 MOVE 15,SVX
02400 ADD 15,XSHIFT ;ADD SHIFT IF ROTATED (IT IS)
02500 MOVEM 15,SVX ;GET X
02600 SUB 15,XX
02700 MOVE 0,15 ;0 HAS X DIFF
02800 HRRZ 16,X
02900 IMULI 16,44 ;TIMES BITS INA WORD
03000 JFFO B,.+1
03100 ADD 16,C ;PLUS REMAINDER EQ OLD X
03200 SUB 16,15
03300 JUMPL 16,LOSEX
03400 CAILE 16,=4427
03500 JRST LOSEX
03600 SKIPE OOBFLG# ;CK IF ALREADY OOB
03700 JRST OOBAR
03800 FIXUP: CAIE A,1 ;FIXUP WHAT?
03900 HRRM A,PENN
04000 HRR A,PENN ;SAME PEN IF 1
04100 CAIN A,3
04200 JRST PENUP ;PENUP IF 3
04300 MOVE C,SVYSB ;Y DIFF
04400 IORM B,@X ;MARK NOW X Y
04500 ;FIND DIRECTION
04600 JUMPE NORMX ;VERT OR NO MOVE
04700 JUMPL MVLFT ;LEFT
04800 JUMPE C,NRT ;HORZ
04900 JUMPL C,MVDWN ;DOWN
05000 CAMLE C,0 ;JUMP IF Y DIFF > X DIFF
05100 JRST XCHA
05200
05300 SETZ 14, ;↓↓ MOVE UP AND RIGHT
05400 TLNE C,200000
05500 JRST .+4
05600 LSH C,1
05700 TRO C,1
05800 AOJA 14,.-4
05900 SUBI 14,=34
06000 IDIV C,0
06100 MOVNS 14
06200 LSH C,(14)
06300 SETZ 15,
06400 INLOOP: ADD 15,C
06500 TLZE 15,200000
06600 ADDI Y,LBUFL+1
06700 SKIPGE B
06800 SOJ X,
06900 ROT B,1
07000 IORM B,@X
07100 SOJG INLOOP
07200 JRST DONXT
07300
00100 XCHA: SETZ 14, ;↓↓MOVE UP AND RIGHT
00200 TLNE 0,200000
00300 JRST .+4
00400 LSH 0,1
00500 TRO 0,1
00600 AOJA 14,.-4
00700 SUBI 14,=34
00800 IDIV 0,C
00900 MOVNS 14
01000 LSH 0,(14)
01100 SETZ 15,
01200 INLOO: ADD 15,0
01300 TLZN 15,200000
01400 JRST MVUP
01500 SKIPGE B
01600 SOJ X,
01700 ROT B,1
01800 MVUP: ADDI Y,LBUFL+1
01900 IORM B,@X
02000 SOJG C,INLOO
02100 JRST DONXT
02200
02300 MVDWN: MOVMS C ;↓↓MOVE DOWN AND RIGHT
02400 CAMLE C,0
02500 JRST XCHA2 ;JUMP IF YDIFF > XDIFF
02600 SETZ 14,
02700 TLNE C,200000
02800 JRST .+4
02900 LSH C,1
03000 TRO C,1
03100 AOJA 14,.-4
03200 SUBI 14,=34
03300 IDIV C,0
03400 MOVNS 14
03500 LSH C,(14)
03600 SETZ 15,
03700 INLOP: ADD 15,C
03800 TLZE 15,200000
03900 SUBI Y,LBUFL+1
04000 SKIPGE B
04100 SOJ X,
04200 ROT B,1
04300 IORM B,@X
04400 SOJG INLOP
04500 JRST DONXT
04600
04700 XCHA2: SETZ 14, ;↓↓MOVE DOWN AND RIGHT
04800 TLNE 0,200000
04900 JRST .+4
05000 LSH 0,1
05100 TRO 0,1
05200 AOJA 14,.-4
05300 SUBI 14,=34
05400 IDIV 0,C
05500 MOVNS 14
05600 LSH 0,(14)
05700 SETZ 15,
05800 INOOP: ADD 15,0
05900 TLZN 15,200000
06000 JRST MVEX
06100 SKIPGE B
06200 SOJ X,
06300 ROT B,1
06400 MVEX: SUBI Y,LBUFL+1
06500 IORM B,@X
06600 SOJG C,INOOP
06700 JRST DONXT
06800
06900 NRT: JUMPL B,GOOP ;HORZ RIGHT
07000 TOOT: ROT B,1
07100 IORM B,@X
07200 SOJG 0,NRT
07300 JRST DONXT
07400 GOOP: SOJ X,
07500 CAIGE 0,44
07600 JRST TOOT
07700 IDIVI 0,44
07800 SETOM @X
07900 SOJ X,
08000 SOJG 0,.-2
08100 HRR 0,1
08200 JUMPN 0,TOOT
08300 AOJ X,
08400 JRST DONXT
08500
08600 NLFT: MOVMS 0 ;HORZ LEFT
08700 ROT B,-1
08800 JUMPL B,ROOT
08900 WOOP: IORM B,@X
09000 SOJG 0,.-3
09100 JRST DONXT
09200 ROOT: AOJ X,
09300 CAIGE 0,44
09400 JRST WOOP
09500 IDIVI 0,44
09600 SETOM @X
09700 AOJ X,
09800 SOJG 0,.-2
09900 HRR 0,1
10000 JUMPN 0,WOOP
10100 SOJ X,
10200 ROT B,1
10300 JRST DONXT
10400 NORMX: JUMPE C,SAVAC ;ENOUT ;NO DIFF
10500 JUMPL C,MDOWN ;MOVE VERT DOWN
10600 MUP: ADDI Y,LBUFL+1 ;MOVE VERT UP
10700 IORM B,@X
10800 SOJG C,MUP
10900 JRST DONXT
11000 MDOWN: SUBI Y,LBUFL+1 ;MOVE VERT DOWN
11100 IORM B,@X
11200 AOJL C,MDOWN
11300 DONXT: MOVE 4,SVX ;DONE. NOW UPDATE X AND Y
11400 MOVEM 4,XX
11500 NXTY: MOVE 4,SVY
11600 MOVEM 4,YY
11700 ;ENOUT: JRST SAVAC ;SAVE ALL ACS
11800 ;AOBJN E,PLOT1 ;GET NEXT
11900
12000 SAVAC: MOVEM 16,ACS+16 ;SAVE AC16
12100 MOVEI 16,ACS ;ARG. FOR BLT
12200 BLT 16,ACS+15 ;WE'VE ALREADY SAVED AC16
12300 MOVE 16,ACS+16
12400 POPJ P,
12500
12600 ACS: BLOCK 17 ;SAVE AC'S 0-16
12700
12800 GETAC: HRLZI 16,ACS
12900 BLT 16,16 ;GET 'EM ALL BACK
13000 POPJ P,
13100
13200 SAVACZ: MOVEM 16,ACZ+16 ;SAVE AC16
13300 MOVEI 16,ACZ ;ARG. FOR BLT
13400 BLT 16,ACZ+15 ;WE'VE ALREADY SAVED AC16
13500 MOVE 16,ACZ+16
13600 POPJ P,
13700
13800 ACZ: BLOCK 17 ;SAVE AC'S 0-16
13900
14000 GETACZ: HRLZI 16,ACZ
14100 BLT 16,16 ;GET 'EM ALL BACK
14200 POPJ P,
00100 MVLFT: MOVMS 0 ;MOVE LEFT THEN RIGHT
00200 MOVMS 15
00300 JUMPE C,NLFT
00400 HRR Y,SVYOD
00500 IDIVI 15,44
00600 ADD X,15
00700 XEND: SOJL 16,DUN
00800 ROT B,-1
00900 JUMPGE B,XEND
01000 AOJ X,
01100 JRST XEND
01200 DUN: MOVEM X,XX ;SAVE NEW X POS
01300 MOVEM B,YY
01400 IORM B,@X
01500 JUMPL C,MVLD
01600 CAMLE C,0
01700 JRST XCHA3
01800 SETZ 14, ;MOVE LEFT UP
01900 TLNE C,200000
02000 JRST .+4
02100 LSH C,1
02200 TRO C,1
02300 AOJA 14,.-4
02400 SUBI 14,=34
02500 IDIV C,0
02600 MOVNS 14
02700 LSH C,(14)
02800 SETZ 15,
02900 ILOOP: ADD 15,C
03000 TLZE 15,200000
03100 SUBI Y,LBUFL+1
03200 SKIPGE B
03300 SOJ X,
03400 ROT B,1
03500 IORM B,@X
03600 SOJG ILOOP
03700 JRST BFOR
03800
03900 XCHA3: SETZ 14,
04000 TLNE 0,200000
04100 JRST .+4
04200 LSH 0,1
04300 TRO 0,1
04400 AOJA 14,.-4
04500 SUBI 14,=34
04600 IDIV 0,C
04700 MOVNS 14
04800 LSH 0,(14)
04900 SETZ 15,
05000 ILOP: ADD 15,0
05100 TLZN 15,200000
05200 JRST DOQ
05300 SKIPGE B
05400 SOJ X,
05500 ROT B,1
05600 DOQ: SUBI Y,LBUFL+1
05700 IORM B,@X
05800 SOJG C,ILOP
05900 JRST BFOR
06000
06100 MVLD: MOVMS C ;MOVE LEFT DOWN
06200 CAMLE C,0
06300 JRST XCHA4
06400 SETZ 14,
06500 TLNE C,200000
06600 JRST .+4
06700 LSH C,1
06800 TRO C,1
06900 AOJA 14,.-4
07000 SUBI 14,=34
07100 IDIV C,0
07200 MOVNS 14
07300 LSH C,(14)
07400 SETZ 15,
07500 LOOP: ADD 15,C
07600 TLZE 15,200000
07700 ADDI Y,LBUFL+1
07800 SKIPGE B
07900 SOJ X,
08000 ROT B,1
08100 IORM B,@X
08200 SOJG LOOP
08300 JRST BFOR
08400
08500 XCHA4: SETZ 14,
08600 TLNE 0,200000
08700 JRST .+4
08800 LSH 0,1
08900 TRO 0,1
09000 AOJA 14,.-4
09100 SUBI 14,=34
09200 IDIV 0,C
09300 MOVNS 14
09400 LSH 0,(14)
09500 SETZ 15,
09600 LOP: ADD 15,0
09700 TLZN 15,200000
09800 JRST DOP
09900 SKIPGE B
10000 SOJ X,
10100 ROT B,1
10200 DOP: ADDI Y,LBUFL+1
10300 IORM B,@X
10400 SOJG C,LOP
10500
10600 BFOR: HRR Y,SVYOD ;RESTORE PEN TO NEW PEN
10700 MOVE X,XX
10800 MOVE B,YY
10900 JRST DONXT
11000
00100 OOBAR: SETZM OOBFLG ; GET HERE IF ALL READY OOB
00200 AOSG SSS ; THIS IS FOR THE FIRST OOB FROM MP
00300 JRST FIXUP ;
00400 PENUP: HRR Y,SVYOD ; PEN IS UP GET NEW Y
00500 JUMPE 15,NXTY ;IF VERT
00600 JUMPL 15,PULFT ;IF LEFT
00700 CAIGE 15,44 ;↓↓MOVE UP PEN RIGHT TO NEW X
00800 JRST XLOOP
00900 IDIVI 15,44
01000 SUB X,15
01100 HRR 15,16
01200 XLOOP: SOJL 15,DONXT
01300 SKIPGE B
01400 SOJ X,
01500 ROT B,1
01600 JRST XLOOP
01700
01800 PULFT: MOVMS 15 ;↓↓MOVE UP PEN LEFT TO NEW X
01900 CAIGE 15,44
02000 JRST OOO
02100 IDIVI 15,44
02200 ADD X,15
02300 HRR 15,16
02400 OOO: SOJL 15,DONXT
02500 ROT B,-1
02600 JUMPGE B,OOO
02700 AOJ X,
02800 JRST OOO
02900
03000 LOSEX: MOVE SVPEN ;IF PEN IS UP DON'T PRINT MESSAGE
03100 CAIN 3
03200 JRST PENUP
03300 SETOM OOBFLG ;OOB X
03400 SKIPE POOBX
03500 JRST PENUP
03600 SETOM POOBX
03700 PUSHJ P,DETCHK
03800 PUSHJ P,XERR
03900 PUSHJ P,ERRPNT
04000 ASCIZ / POINT OUT OF BOUNDS, /
04100 JUMPL 16,[PUSHJ P,ERRPNT
04200 ASCIZ/-X/
04300 JRST PENUP]
04400 PUSHJ P,ERRPNT
04500 ASCIZ/+X/
04600 JRST PENUP
04700
04800 LOSE: SETOM OOBFLG ;OOB Y
04900 SKIPE POOBY
05000 JRST LOBAC
05100 SETOM POOBY
05200 PUSHJ P,DETCHK
05300 PUSHJ P,XERR
05400 PUSHJ P,ERRPNT
05500 ASCIZ / POINT OUT OF BOUNDS, /
05600 CAIGE 15,(L)
05700 JRST [ PUSHJ P,ERRPNT
05800 ASCIZ/-Y/
05900 JRST LOBAC]
06000 PUSHJ P,ERRPNT
06100 ASCIZ/+Y/
06200 LOBAC: LSHC 14,-16
06300 ASH 15,-26
06400 MOVEM 15,SVX
06500 SUB 15,XX
06600 JRST PENUP
06700
06800 DECOUT: IDIVI T,=10 ;DEC TTY OUT
06900 HRLM TT,(P)
07000 SKIPE T
07100 PUSHJ P,DECOUT
07200 HLRZ TT,(P)
07300 ADDI TT,60
07400 ROT TT,-7
07500 MOVEM TT,.+2
07600 PUSHJ P,ERRPNT
07700 0
07800 POPJ P,
07900
08000 ERRPNT: HRRZ TT,(P) ;ERROR TTY OUT
08100 MOVEM TT,PNTR
08200 MOVEI TT,LINE
08300 TTYMES TT,
08400 JRST [ OUTSTR[ASCIZ/TTYMES FAILED /]
08500 OUTSTR @PNTR
08600 OUTSTR[ASCIZ/
08700 /]
08800 JRST .+1]
08900 POP P,TT
09000 HRL TT,(TT)
09100 TLNE TT,376
09200 AOJA TT,.-2
09300 JRST 1(TT)
09400
09500 XERR: PUSHJ P,ERRPNT ;DET TTY OUT
09600 ASCIZ/
09700 MESSAGE FROM X WORKING ON /
09800 MOVE TT,FILNAM
09900 PUSHJ P,SIXOUT
10000 PUSHJ P,ERRPNT
10100 ASCIZ/./
10200 HLLZ TT,FILEXT
10300 PUSHJ P,SIXOUT
10400 PUSHJ P,ERRPNT
10500 ASCIZ/[/
10600 MOVE TT,FILPPN
10700 PUSHJ P,SIXOUT
10800 PUSHJ P,ERRPNT
10900 ASCIZ/] : /
11000 POPJ P,
11100
11200 SIXOUT: JUMPE TT,CPOPJ ;SIXBIT OUT
11300 SETZ T,
11400 LSHC T,6
11500 ADDI T,40
11600 PUSH P,TT
11700 ROT T,-7
11800 MOVEM T,.+2
11900 PUSHJ P,ERRPNT
12000 0
12100 POP P,TT
12200 JRST SIXOUT
12300
12400 DETCHK: SETOM DET# ;CK FOR DET JOB
12500 GETLIN DET
12600 HRRES DET
12700 SKIPL DET
12800 AOS (P)
12900 POPJ P,
13000
00100 FINDL: HRRZ A,JOBREL ;CK IF BIG ENUF
00200 CAIL A,-LBUFL-1(U)
00300 JRST XINL-1
00400 XL2: MOVEM TT,(T) ;ADD MORE AND MARK
00500 ADDI T,LBUFL+1
00600 CAIGE T,(A)
00700 JRST XL2
00800 SUBI A,(L)
00900 MOVNS A
01000 HRLM A,XGPPTR
01100 SUBI T,LBUFL+1
01200 JRST XXOUT
01300
01400 PCUT: PUSHJ P,GETAC ;GET BACK ACS
01500 HRRZ L,XGPPTR ;MARK BLOCK FOR XGP
01600 MOVE TT,[BYTE (12)4001,LMAR,LBUFL]
01700 MOVEM TT,1(L) ;FIRST ONE HAS MARK AND CUT WITH IT
01800 TLZ TT,400000 ;DELETE MARK AND CUT
01900 MOVEI T,1+LBUFL+1(L)
02000 ;; SKIPGE DEFA ;IF(DEFA.EQ.0)WE GET C.5" OF EXTRA PAPER
02100 JRST FINDL
02200 MOVE B,SVBBB
02300 XINL: MOVEM TT,(T)
02400 ADDI T,LBUFL+1
02500 SOJG B,XINL
02600 HLRO TT,XGPPTR
02700 MOVNS TT
02800 ADDI TT,(L)
02900 MOVE A,(TT)
03000 XXOUT: MOVSI TT,400100
03100 MOVEM TT,(T) ;SO DOES LAST
03200
03300 XGPOUT: SKIPE SAVBIT ;SAVE THE BIT MAP?
03400 JRST OUTFIL ;YES
03500 OPEN VRN,XNIT ;XGP OUTPUT
03600 JRST NOXGP
03700 OUTSTR[ASCIZ/
03800 CRANKING VRN
03900 /]
04000 LOCK
04100 OUTIT: OUT VRN,XGPPTR
04200 JRST OUTOK
04300 DSKERR: PUSHJ P,DETCHK
04400 PUSHJ P,XERR
04500 PUSHJ P,ERRPNT
04600 ASCIZ /VRN OUTPUT ERROR.
04700 /
04800 OUTOK: UNLOCK
04900 RELEAS VRN,
05000 XMORE: PUSHJ P,DETCHK
05100 JFCL
05200 OUTSTR[ASCIZ/R=REPEAT, X=EXIT /]
05300 INCHRW C
05400 CAIE C,15
05500 JRST .+3
05600 INCHRW C
05700 JRST XMORE+2 ; WON'T ACCEPT JUST CRLF
05800 OUTSTR[ASCIZ/
05900 /]
06000 CAIE C,"X"
06100 CAIN C,"x"
06200 SKIPA
06300 JRST .+3
06400 PUSHJ P,CORDWN ;REALLY DONE, CORE DOWN
06500 JRST NODEL
06600 CAIE C,"R"
06700 CAIN C,"r"
06800 JRST XGPOUT
06900 JRST XMORE+2 ;******* NO DELETE FEATURE IN THIS VERSION.
07000
07100 CAIE C,"D"
07200 CAIN C,"d"
07300 SKIPA ;IF NOT R, X OR D TRY AGAIN.
07400 JRST XMORE+2
07500 PUSHJ P,CORDWN ;REALLY DONE, CORE DOWN
07600 DODEL: MOVE A,[FILNAM,,LKENT]
07700 BLT A,LKENT+3
07800 INIT DSK,17
07900 'DSK '
08000 0
08100 JRST [ SKIPGE DET
08200 PUSHJ P,XERR
08300 PUSHJ P,ERRPNT
08400 ASCIZ/COULDN'T GET DISK FOR DELETE!
08500 /
08600 JRST NODEL]
08700 LOOKUP DSK,LKENT
08800 JRST [ SKIPGE DET
08900 PUSHJ P,XERR
09000 PUSHJ P,ERRPNT
09100 ASCIZ/LOOKUP FOR DELETE FAILED!
09200 /
09300 JRST NODEL]
09400 MOVE A,FILPPN
09500 MOVEM A,LKENT+3
09600 SETZM LKENT
09700 RENAME DSK,LKENT
09800 CAIA
09900 JRST NODEL
10000 SKIPGE DET
10100 PUSHJ P,XERR
10200 PUSHJ P,ERRPNT
10300 ASCIZ/RENAME FOR DELETE FAILED!
10400 /
10500 NODEL: RELEASE DSK,
10600 SKIPGE DET
10700 PUSHJ P,XERR
10800 PUSHJ P,ERRPNT
10900 ASCIZ/ALL DONE!
11000 /
11100 CALLI 12 ;LEAVE
11200
11300 NOXGP: PUSHJ P,DETCHK
11400 PUSHJ P,XERR
11500 PUSHJ P,ERRPNT
11600 ASCIZ /
11700 WAITING FOR VRN -- /
11800 HRRZI A,1017
11900 HRRZM A,XNIT
12000 JRST XGPOUT
12100
12200 XNIT: 417
12300 'VRN '
12400 0
12500 XGPPTR: BLOCK 2
12600
12700 IFN LSTBIT-1,<
12800 XFIX: MOVE A,[LSTBIT-1]
12900 HRRZ C,JOBREL
13000 HRRZ D,XGPPTR
13100 XFIXL: ANDCAM A,LBUFL-1+2(D)
13200 ADDI D,LBUFL+1
13300 CAIGE D,(C)
13400 JRST XFIXL
13500 POPJ P,
13600 >
13700 CORDWN: MOVE T,JOBFF
13800 SUBI T,1
13900 CALLI T,11
14000 JRST 4,.
14100 POPJ P,
14200
00100 INBITS: PUSHJ P,NAMGET ;INPUT OLD BIT FILE
00200 HRRZ U,JOBFF
00300 HRRZI T,177(U)
00400 CORE T,
00500 JRST INBITS
00600 SOJ U,
00700 HRLI U,-200
00800 OPEN [17↔'DSK '↔0]
00900 JRST INBITS
01000 LOOKUP FILNAM
01100 JRST INBITS
01200 SETZ 10,
01300 TRYTRY: OPEN VRN,XNIT ;***** GRAB THE VRN BEFORE CORE EXPANSION
01400 JRST NONO ;CAN'T GET IT!
01500 INPUT U
01600 MOVE T,[BYTE (12)4001,LMAR,LBUFL]
01700 EXCH T,1(U)
01800 HLL U,T
01900 MOVEM U,XGPPTR
02000 HRLI U,(T)
02100 TLNN U,777777
02200 JRST CLOZE
02300 ADDI U,200
02400 MOVNI T,(T)
02500 ADDI T,(U)
02600 CORE T,
02700 JRST INBITS ;HANG
02800 INPUT U
02900 CLOZE: RELEAS
03000 JRST XGPOUT
03100
03200 NONO: OUTSTR[ASCIZ/
03300 WAITING FOR VRN /]
03400 HRRZI A,1017
03500 HRRZM A,XNIT
03600 JRST TRYTRY
03700
03800 OUTFIL: OUTSTR [ASCIZ/
03900 --- WRITING /]
04000 ; OUTSTR FNX ;THE OUTPUT NAME - SAME AS FILNAM (SIXBIT)
04100 PUSHJ P,SAVAC
04200 JSA 16,TYPWRD
04300 JUMP FNX ;THE FILE NAME
04400 OUTSTR [ASCIZ/.VRN -- /]
04500 PUSHJ P,GETAC ;I GUESS I NEED ORIGINAL ACS BACK.
04600 MOVSI A,'VRN'
04700 MOVEM A,FILEXT
04800 MOVE U,XGPPTR
04900 HLRO T,U
05000 MOVNS T
05100 OUTF2: TRZ T,177
05200 HRRZI A,200(T)
05300 ADDI A,(U)
05400 CORE A,
05500 JRST OUTFIL
05600 MOVNS T
05700 HLL T,U ;FIRST WD IS WC-200,-WC
05800 MOVEM T,1(U)
05900 HRLI U,-200(T)
06000 SETZ 10,
06100 OPEN [17↔'DSK '↔0]
06200 JRST 4,.
06300 ENTER FILNAM
06400 CAIA
06500 MOVEI 0,HEADER
06600 SUBI 0,1
06700 MOVEM 0,COM
06800 MOVNI 0,200
06900 HRLM 0,COM
07000 OUTPUT COM
07100 STATZ 0,740000
07200 HALT ;ERROR <WRITE ERROR>
07300 OUTPUT U
07400 RELEAS
07500 PUSHJ P,CORDWN ;GET RID OF EXCESS CORE
07600 JRST NODEL
07700 COM: 0
07800 0
07900 HEADER: 0
08000 0
08100 =119 ;MUST BE 1 MORE THAN LBUFL ON PAGE 2.
08200 0
08300 PWIDTH: =1700 ;NUMBER OF SCAN LINES IN FILE. 8.5"
08400 0 ;ABOVE IS SET AT INIT STAGE.
08500 117 ;WORD 2 +DECIMAL 37 -- NOT NEEDED
08600 0
08700 0
08800 0
00100 ;CORUP
00200
00300 CORUP:
00400
00500 REPEAT 0,< OLD WAY - FLUSHED BY REG 1-3-76
00600
00700 HRRZ B,JOBCNI
00800 CAIE B,20000
00900 DISMIS
01000 MOVE A,JOBTPC
01100 MOVEM A,IPC+1
01200 UWAIT
01300 DEBREAK
01400 >;END REPEAT 0
01500
01600 BUST: MOVEM 1,SVONE#
01700 MOVEM 2,SVTWO#
01800 MOVEM TT,SVTTT#
01900 MOVE 1,JOBCNI ;REG GET APR CONI BITS
02000 TRNN 1,20000 ;REG IS THERE AN MPV?
02100 JRST NOMPV ;REG NO
02200 HRRZ 1,JOBREL ;OLD CORE SIZE
02300 MOVSI 2,1(1) ;FIRST NEW WORD WE'LL GET
02400 HRRI 2,2(1) ;SECOND NEW WORD - 2 HAS A BLT POINTER.
02500 ADDI 1,16000
02600 ;; ADDI 1,10000 ;GET ANOTHER 8K
02700 MOVE TT,1
02800 CORE 1,
02900 PUSHJ P,CORLUZ
03000 HRRZ 1,JOBREL
03100 SETZM -1(2)
03200 BLT 2,(1) ;ZERO NEW CORE
03300 MOVE 1,SVONE
03400 MOVE 2,SVTWO
03500 MOVE TT,SVTTT
03600
03700 REPEAT 0,<
03800 INTJEN IPC
03900 >
04000
04100 JRST 2,@JOBTPC ;REG THIS IS HOW TO DISMISS OLD INTERRUPT
04200
04300 NOMPV: OUTSTR [ASCIZ/UNEXPECTED INTERRUPT?
04400 /]
04500 JRST 2,@JOBTPC
04600
04700 CORLUZ: MOVE T,TT
04800 LSH T,-12
04900 PUSH P,T
05000 PUSHJ P,DETCHK
05100 PUSHJ P,XERR
05200 POP P,T
05300 PUSHJ P,DECOUT
05400 PUSHJ P,ERRPNT
05500 ASCIZ / K OF CORE NEEDED!
05600 /
05700 SKIPGE DET
05800 CALLI 12
05900 JRST ASKLEN
06000
06100 FNF: PUSHJ P,DETCHK ;FILE NOT FOUND
06200 PUSHJ P,XERR
06300 PUSHJ P,ERRPNT
06400 ASCIZ /LOOKUP FAILED.
06500 /
06600 SKIPGE DET
06700 CALLI 12
06800 JRST FILIN
06900
00100 ;******** TYPE '4' FOR 4X4 DOTS, TYPE '9' FOR 9X9 DOTS.***********
00200
00300 FRD: MOVSI A,'PLT' ;FILE SCAN
00400 MOVEM A,FILEXT
00500 PUSHJ P,GETNAM
00600
00700 NOSAV: SKIPN A
00800 MOVE A,['PLT ']
00900 MOVEM A,FILNAM
01000 CAIE C,"."
01100 JRST NOEXT
01200 PUSHJ P,GETNAM
01300 MOVEM A,FILEXT
01400 NOEXT: CAIE C,"["
01500 JRST FRDX
01600 PUSHJ P,GETP
01700 HRLZM A,FILPPN
01800 PUSHJ P,GETP
01900 HRRM A,FILPPN
02000 FRDX: INCHRW C
02100 CAIE C,12
02200 JRST FRDX
02300 POPJ P,
02400
02500 RNUM: INCHWL C ;NUM SCAN
02600 CAIN C,15
02700 JRST RNUM
02800 CAIN C,12
02900 POPJ P,
03000 AOS (P)
03100 MOVEI A,
03200 SETZM SIGN
03300 CAIN C,"-"
03400 JRST [ PUSHJ P,RNUML
03500 SETOM SIGN
03600 MOVN A,A
03700 POPJ P,]
03800 CAIN C,"+"
03900 RNUML: INCHWL C
04000 CAIL C,"0"
04100 CAILE C,"9"
04200 JRST RNUMX
04300 IMULI A,12
04400 ADDI A,-"0"(C)
04500 JRST RNUML
04600
04700 RNUMX: CAIN C,15
04800 INCHRW C
04900 POPJ P,
05000
05100 INCHLF: INCHWL 0 ;GET ANOTHER CHARACTER
05200 CAIE 0,12 ;WAS IT A LF?
05300 JRST INCHLF ;GET THE LF
05400 POPJ P,
00100 GETNAM: MOVEI A, ;FILE SCAN
00200 MOVE B,[440600,,A]
00300 GETNML: PUSHJ P,RCH
00400 POPJ P,
00500 SUBI C,40
00600 TLNE B,770000
00700 IDPB C,B
00800 JRST GETNML
00900
01000 GETP: MOVEI A,
01100 GETPL: PUSHJ P,RCH
01200 POPJ P,
01300 TRNE A,770000
01400 JRST GETPL
01500 LSH A,6
01600 ADDI A,-40(C)
01700 JRST GETPL
01800
01900 RCH: INCHWL C
02000 CAIN C,42
02100 JRST RCHQ
02200 CAIE C,11
02300 CAIN C," "
02400 JRST RCH
02500 CAIE C,"."
02600 CAIN C,","
02700 POPJ P,
02800 CAIE C,"["
02900 CAIN C,"]"
03000 POPJ P,
03100 RCHQR: CAIGE C,40
03200 POPJ P,
03300 CAIL C,"a"
03400 CAILE C,"z"
03500 CAIA
03600 SUBI C,40
03700 JRST POPJ1
03800
03900 RCHQ: INCHWL C
04000 JRST RCHQR
04100
04200 NAMGET: PUSHJ P,INCHLF
04300 OUTSTR [ASCIZ/
04400 FILE = /]
04500 SETZM FILEXT+1
04600 SETZM FILPPN
04700 MOVSI A,'BIT'
04800 MOVEM A,FILEXT
04900 PUSHJ P,GETNAM
05000 SKIPN A
05100 MOVE A,['PLT ']
05200 MOVEM A,FILNAM
05300 CAIE C,"."
05400 JRST NOEXTN
05500 PUSHJ P,GETNAM
05600 MOVEM A,FILEXT
05700 NOEXTN: CAIE C,"["
05800 JRST FFDX
05900 PUSHJ P,GETP
06000 HRLZM A,FILPPN
06100 PUSHJ P,GETP
06200 HRRM A,FILPPN
06300 FFDX: INCHRW C
06400 CAIE C,12
06500 JRST FFDX
06600 POPJ P,
06700
06800 FILNAM: 0 ;GLOPS OF JUNK
06900 FILEXT: 0
07000 0
07100 FILPPN: 0
07200
07300 LKENT: BLOCK 4
07400
07500 XGSNAM: 0
07600 XGSEXT: 0
07700 0
07800 XGSPPN: 0
07900
08000 IBUF: BLOCK 3
08100
08200 BITTAB: FOR I←43,0,-1{1⊗I
08300 }
08400 BYTTAB: FOR I←36,0,-6{REPEAT 6,{77⊗I}}
08500
08600 DBUF: BLOCK LBUFL+2
08700
08800 END